home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 08 - 1992 / 08.07 Nov⁄Dec 92 / Getting Started / EventMaster in Pascal / EventMaster.p next >
Encoding:
Text File  |  1992-10-28  |  2.7 KB  |  166 lines  |  [TEXT/PJMM]

  1. program EventMaster;
  2.     const
  3.         kBaseResID = 128;
  4.         kSleep = $FFFFFFFF;
  5.         kRowHeight = 14;
  6.         kFontSize = 9;
  7.         kMouseDown = 1;
  8.         kMouseUp = 2;
  9.         kKeyDown = 3;
  10.         kAutoKey = 4;
  11.  
  12.     var
  13.         gDone: BOOLEAN;
  14.         gLastEvent: INTEGER;
  15.  
  16. {————————————————>    DrawFrame    <—-}
  17.  
  18.     procedure DrawFrame (eventType: INTEGER);
  19.         var
  20.             r: Rect;
  21.             window: WindowPtr;
  22.     begin
  23.         window := FrontWindow;
  24.         r := window^.portRect;
  25.  
  26.         r.top := kRowHeight * (eventType - 1);
  27.         r.bottom := r.top + kRowHeight - 1;
  28.  
  29.         FrameRect(r);
  30.     end;
  31.  
  32. {————————————————>    SelectEvent    <—-}
  33.  
  34.     procedure SelectEvent (eventType: INTEGER);
  35.         var
  36.             r: Rect;
  37.             window: WindowPtr;
  38.     begin
  39.         window := FrontWindow;
  40.         r := window^.portRect;
  41.  
  42.         if gLastEvent <> 0 then
  43.             begin
  44.                 ForeColor(whiteColor);
  45.                 DrawFrame(gLastEvent);
  46.                 ForeColor(blackColor);
  47.             end;
  48.  
  49.         DrawFrame(eventType);
  50.  
  51.         gLastEvent := eventType;
  52.     end;
  53.  
  54. {————————————————>    DrawContents    <—-}
  55.  
  56.     procedure DrawContents;
  57.         var
  58.             i: INTEGER;
  59.             window: WindowPtr;
  60.     begin
  61.         window := FrontWindow;
  62.  
  63.         for i := 1 to 3 do
  64.             begin
  65.                 MoveTo(0, (kRowHeight * i) - 1);
  66.                 LineTo(window^.portRect.right, (kRowHeight * i) - 1);
  67.             end;
  68.  
  69.         MoveTo(4, 9);
  70.         DrawString('mouseDown');
  71.  
  72.         MoveTo(4, 9 + kRowHeight);
  73.         DrawString('mouseUp');
  74.  
  75.         MoveTo(4, 9 + kRowHeight * 2);
  76.         DrawString('keyDown');
  77.  
  78.         MoveTo(4, 9 + kRowHeight * 3);
  79.         DrawString('autoKey');
  80.  
  81.         if gLastEvent <> 0 then
  82.             DrawFrame(gLastEvent);
  83.     end;
  84.  
  85. {————————————————>    HandleMouseDown    <—-}
  86.  
  87.     procedure HandleMouseDown (event: EventRecord);
  88.         var
  89.             window: WindowPtr;
  90.             thePart: INTEGER;
  91.     begin
  92.         thePart := FindWindow(event.where, window);
  93.  
  94.         if thePart = inGoAway then
  95.             gDone := true;
  96.     end;
  97.  
  98. {————————————————>    DoEvent    <—-}
  99.  
  100.     procedure DoEvent (event: EventRecord);
  101.     begin
  102.         case event.what of
  103.             mouseDown: 
  104.                 begin
  105.                     SelectEvent(kMouseDown);
  106.                     HandleMouseDown(event);
  107.                 end;
  108.             mouseUp: 
  109.                 SelectEvent(kMouseUp);
  110.             keyDown: 
  111.                 SelectEvent(kKeyDown);
  112.             autoKey: 
  113.                 SelectEvent(kAutoKey);
  114.             updateEvt: 
  115.                 begin
  116.                     BeginUpdate(WindowPtr(event.message));
  117.                     DrawContents;
  118.                     EndUpdate(WindowPtr(event.message));
  119.                 end;
  120.         end;
  121.     end;
  122.  
  123. {————————————————>    EventLoop    <—-}
  124.  
  125.     procedure EventLoop;
  126.         var
  127.             event: EventRecord;
  128.     begin
  129.         gDone := FALSE;
  130.  
  131.         while gDone = FALSE do
  132.             begin
  133.                 if WaitNextEvent(everyEvent, event, kSleep, nil) then
  134.                     DoEvent(event);
  135.             end;
  136.     end;
  137.  
  138. {————————————————>    WindowInit    <—-}
  139.  
  140.     procedure WindowInit;
  141.         var
  142.             window: WindowPtr;
  143.     begin
  144.         window := GetNewWindow(kBaseResID, nil, WindowPtr(-1));
  145.  
  146.         if window = nil then
  147.             begin
  148.                 SysBeep(10);
  149.                 ExitToShell;
  150.             end;
  151.  
  152.         SetPort(window);
  153.         TextSize(kFontSize);
  154.  
  155.         ShowWindow(window);
  156.     end;
  157.  
  158. {————————————————>    EventMaster    <—-}
  159.  
  160. begin
  161.     gLastEvent := 0;
  162.  
  163.     WindowInit;
  164.  
  165.     EventLoop;
  166. end.